{$CLEO .qa}
{$USE CLEO+}
{$USE Audio}
{$USE newOpcodes}
{$USE ini}

0000: NOP

script_name "PLCRQA"

// By ArtemQa146

const
    cop_1 = 31@
    cop_car = 30@
    driver_1 = 29@
    driver_car = 28@
    progress = 27@
    select = 26@
    car_id = 25@
    ped_id = 24@
    boot_angle = 23@
    coord_x = 22@
    coord_y = 21@
    coord_z = 20@
    angle_1 = 19@
end

0087: coord_x = 0@ // (float)
0087: coord_y = 1@ // (float)
0087: coord_z = 2@ // (float)
0087: angle_1 = 3@ // (float)

if
    0E4D: random_percent 4@
then
else
    repeat
    wait 0
    until not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coord_x coord_y coord_z radius 200.0
    0A93: terminate_this_custom_script
end

repeat
wait 0
04ED: load_animation  "PedEventsMod"
until 04EE:   animation "PedEventsMod" loaded


0209: 1@ = random_int_in_ranges 1 6
if 1@ == 1
then car_id = 410
end
if 1@ == 2
then car_id = 405
end
if 1@ == 3
then car_id = 445
end
if 1@ == 4
then car_id = 516
end
if 1@ == 5
then car_id = 527
end

0209: 1@ = random_int_in_ranges 1 6
if 1@ == 1
then ped_id = 17
end
if 1@ == 2
then ped_id = 21
end
if 1@ == 3
then ped_id = 46
end
if 1@ == 4
then ped_id = 58
end
if 1@ == 5
then ped_id = 59
end


repeat
wait 0
model.Load(599)
until model.Available(599)

repeat
wait 0
model.Load(car_id)
until model.Available(car_id)

model.Load(ped_id)
if
    not model.Available(ped_id)
then
    repeat
    wait 0
    model.Load(ped_id)
    until model.Available(ped_id)
end
model.Load(283)
if
    not model.Available(283)
then
    repeat
    wait 0
    model.Load(283)
    until model.Available(283)
end
038B: load_requested_models

0209: select = random_int_in_ranges 1 4

if
    select == 1
then
    00A5: driver_car = create_car car_id at coord_x coord_y coord_z
    0175: set_car driver_car Z_angle_to angle_1
    0407: store_coords_to 1@ 2@ 3@ from_car driver_car with_offset 0.0 -10.0 0.0
    00A5: cop_car = create_car 599 at 1@ 2@ 3@
    0175: set_car cop_car Z_angle_to angle_1
    0129: driver_1 = create_actor_pedtype 21 model ped_id in_car driver_car driverseat


    0A97: 1@ = car driver_car struct
    0D4E: 1@ = read_struct 1@ offset 0x18 size 4
    0AA7: call_function 0x4C5400 num_params 2 pop 2 "door_lf_dummy" 1@ 2@
        if
            2@ <> 0
        then
            2@ += 64
            0D4E: 4@ = read_struct 2@ offset 0x0 size 4
            0D4E: 5@ = read_struct 2@ offset 0x4 size 4
            0D4E: 6@ = read_struct 2@ offset 0x8 size 4
            4@ -= 0.5
            5@ -= 1.0
            0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset 4@ 5@ 6@
        else
            009B: destroy_actor driver_1
            00A6: destroy_car driver_car
            00A6: destroy_car cop_car
            model.Destroy(283)
            model.Destroy(599)
            model.Destroy(ped_id)
            model.Destroy(car_id)
            04EF: release_animation "PedEventsMod"
            repeat
            wait 0
            until not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coord_x coord_y coord_z radius 100.0
            0A93: terminate_this_custom_script
        end

    009A: cop_1 = create_actor_pedtype 6 model 283 at 4@ 5@ 6@
    0174: 1@ = car driver_car Z_angle
    0173: set_actor cop_1 Z_angle_to 1@
    0E24: fix_char cop_1 ground 1 brightness 1 and_fade_in 0

    0812: AS_actor cop_1 perform_animation "cop_sp_c1" IFP "PedEventsMod" framedelta 8.0 loopA 1 lockX 0 lockY 0 lockF 0 time -1  // versionB
    0812: AS_actor driver_1 perform_animation "cop_sp_d1" IFP "PedEventsMod" framedelta 2.0 loopA 1 lockX 0 lockY 0 lockF 0 time -1  // versionB
    0D33: set_car driver_car door 10 window_state 1
    
end

if
    select == 2
then
    00A5: driver_car = create_car car_id at coord_x coord_y coord_z
    0175: set_car driver_car Z_angle_to angle_1
    0407: store_coords_to 1@ 2@ 3@ from_car driver_car with_offset 0.0 -10.0 0.0
    00A5: cop_car = create_car 599 at 1@ 2@ 3@
    0175: set_car cop_car Z_angle_to angle_1


    0A97: 1@ = car driver_car struct
    0D4E: 1@ = read_struct 1@ offset 0x18 size 4
    0AA7: call_function 0x4C5400 num_params 2 pop 2 "boot_dummy" 1@ 2@
        if
            2@ <> 0
        then
            0441: 4@ = car driver_car model
            07E4: get_model 4@ dimensions_cornerA_to 1@ 2@ 3@ dimensions_cornerB_to 1@ 3@ 3@ // B
            2@ -= 0.6
            0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset 0.5 2@ 0.0
        else
            00A6: destroy_car driver_car
            00A6: destroy_car cop_car
            model.Destroy(283)
            model.Destroy(599)
            model.Destroy(ped_id)
            model.Destroy(car_id)
            04EF: release_animation "PedEventsMod"
            repeat
            wait 0
            until not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coord_x coord_y coord_z radius 100.0
            0A93: terminate_this_custom_script
        end

    009A: cop_1 = create_actor_pedtype 6 model 283 at 4@ 5@ 6@
    2@ += 0.2
    0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset -0.75 2@ 0.0
    009A: driver_1 = create_actor_pedtype 21 model ped_id at 4@ 5@ 6@
    0174: 1@ = car driver_car Z_angle
    0173: set_actor cop_1 Z_angle_to 1@
    0E24: fix_char cop_1 ground 1 brightness 1 and_fade_in 0
    0173: set_actor driver_1 Z_angle_to 1@
    0E24: fix_char driver_1 ground 1 brightness 1 and_fade_in 0

    0812: AS_actor cop_1 perform_animation "stand_1" IFP "PedEventsMod" framedelta 8.0 loopA 1 lockX 0 lockY 0 lockF 0 time -1  // versionB
    0812: AS_actor driver_1 perform_animation "cop_sp_d2_3" IFP "PedEventsMod" framedelta 2.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1  // versionB

end


if
    select == 3
then
    00A5: driver_car = create_car car_id at coord_x coord_y coord_z
    0175: set_car driver_car Z_angle_to angle_1
    0407: store_coords_to 1@ 2@ 3@ from_car driver_car with_offset 0.0 +10.0 0.0
    00A5: cop_car = create_car 599 at 1@ 2@ 3@
    0175: set_car cop_car Z_angle_to angle_1


    0441: 4@ = car driver_car model
    07E4: get_model 4@ dimensions_cornerA_to 1@ 3@ 3@ dimensions_cornerB_to 1@ 2@ 3@ // B
    2@ += 1.0
    0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset 0.5 2@ 0.0


    009A: cop_1 = create_actor_pedtype 6 model 283 at 4@ 5@ 6@
    0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset -0.3 2@ 0.0
    009A: driver_1 = create_actor_pedtype 21 model ped_id at 4@ 5@ 6@
    0174: 1@ = car driver_car Z_angle
    1@ += 90.0
    0173: set_actor cop_1 Z_angle_to 1@
    0E24: fix_char cop_1 ground 1 brightness 1 and_fade_in 0
    0173: set_actor driver_1 Z_angle_to 1@
    0E24: fix_char driver_1 ground 1 brightness 1 and_fade_in 0

    0812: AS_actor cop_1 perform_animation "cop_sp_c3" IFP "PedEventsMod" framedelta 8.0 loopA 1 lockX 0 lockY 0 lockF 0 time -1  // versionB
    0812: AS_actor driver_1 perform_animation "cop_sp_d3" IFP "PedEventsMod" framedelta 8.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1  // versionB

end

020A: set_car cop_car door_status_to 1
model.Destroy(283)
model.Destroy(599)
model.Destroy(car_id)
model.Destroy(ped_id)
timera = 0
progress = -1
boot_angle = 0.0

repeat
wait 0
    if and
        056D:   actor cop_1 defined
        056D:   actor driver_1 defined
        056E:   car driver_car defined
        056E:   car cop_car defined
    then
    
    // , ,    
    080E: get_actor cop_1 ped_event_to 3@
    if or
        actor.Dead(cop_1)
        actor.Dead(driver_1)
        3@ == 49
        3@ == 9
        051A:   actor cop_1 damaged_by_actor $PLAYER_ACTOR
        not is_char_script_controlled cop_1
        not $ACTIVE_INTERIOR == 0
    then
        break
    end
    
    080E: get_actor cop_1 ped_event_to 3@
    if or
        3@ == 15
        3@ == 31
        3@ == 59
    then
        break
    end
    
    080E: get_actor driver_1 ped_event_to 3@
    if or
        3@ == 15
        3@ == 31
        3@ == 59
    then
        break
    end
    

    // , ,    
    080E: get_actor driver_1 ped_event_to 3@
    if or
        3@ == 49
        3@ == 9
        051A:   actor driver_1 damaged_by_actor $PLAYER_ACTOR
        not is_char_script_controlled driver_1
        0119:   car driver_car wrecked
        0119:   car cop_car wrecked
    then
        break
    end
    
    if
        051C:   car cop_car damaged_by_actor $PLAYER_ACTOR
    then
        010E: set_player $PLAYER_CHAR minimum_wanted_level_to 1
        break
    end
    
    if and
        progress == -1
        0EE4: locate_char_distance_to_char $PLAYER_ACTOR char driver_1 radius 30.0
    then
        progress = 0
        if
            select == 2
        then
            0812: AS_actor driver_1 perform_animation "cop_sp_d2" IFP "PedEventsMod" framedelta 2.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1  // versionB
            continue
        end
        if
            select == 1
        then
            timera = 5000
        end
    end

    if
        select == 1
    then
    
        if and
            progress == 0
            timera > 12000
        then
            0407: store_coords_to 4@ 5@ 6@ from_car cop_car with_offset -2.0 0.0 0.0
            0615: define_AS_pack_begin 1@
            05D3: AS_actor -1 goto_point 4@ 5@ 6@ mode 4 time 15000 ms // versionA
            05CB: AS_actor -1 enter_car cop_car as_driver 15000 ms
            0616: define_AS_pack_end 1@
            0618: assign_actor cop_1 to_AS_pack 1@
            061B: remove_references_to_AS_pack 1@
            0687: clear_actor driver_1 task
            progress = 1
        end
        
        if and
            00DB:   actor cop_1 in_car cop_car
            progress == 1
        then
            01C2: remove_references_to_actor cop_1 // Like turning an actor into a random pedestrian
            00AE: set_car cop_car traffic_behaviour_to 4 //   
            00AF: set_car cop_car driver_behaviour_to 1 //    
            01C2: remove_references_to_actor driver_1 // Like turning an actor into a random pedestrian
            01C3: remove_references_to_car cop_car
            01C3: remove_references_to_car driver_car
            cop_1 = -1
            cop_car = -1
            driver_1 = -1
            driver_car = -1
            break
        end
    end
    
    if
        select == 2
    then
        0A97: 1@ = car driver_car struct
        0D4E: 1@ = read_struct 1@ offset 0x18 size 4
        0AA7: call_function 0x4C5400 num_params 2 pop 2 "boot_dummy" 1@ 2@
        if and
            progress == 0
            0611:   actor driver_1 performing_animation "cop_sp_d2"
            2@ <> 0
        then
            0613: 1@ = actor driver_1 animation "cop_sp_d2" time
            if
                1@ > 0.9
            then
                0812: AS_actor cop_1 perform_animation "Homeless3" IFP "PedEventsMod" framedelta 2.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1  // versionB
                progress = 1
                boot_angle = 0.0
                continue
            end
            if
                1@ > 0.2
            then
                3@ = 6.25
                1@ /= 100.0
                1@ += 0.02
                005B: boot_angle += 1@  // (float)
                if boot_angle > 1.0
                then boot_angle = 1.0
                end
                0063: 3@ -= boot_angle  // (float)
                2@ += 0x10
                0AA6: call_method 0x59AFA0 struct 2@ num_params 1 pop 0 3@ // Rotate Z
            end
        end


        if and
            0611:   actor cop_1 performing_animation "Homeless3"
            progress == 1
        then
            0613: 1@ = actor cop_1 animation "Homeless3" time
            if
                1@ > 0.9
            then
                progress = 2
                
                0407: store_coords_to 4@ 5@ 6@ from_car cop_car with_offset -2.0 0.0 0.0
                0615: define_AS_pack_begin 1@
                0812: AS_actor -1 perform_animation "cop_sp_c2" IFP "PedEventsMod" framedelta 2.0 loopA 0 lockX 0 lockY 0 lockF 0 time -1  // versionB
                05D3: AS_actor -1 goto_point 4@ 5@ 6@ mode 4 time 15000 ms // versionA
                05CB: AS_actor -1 enter_car cop_car as_driver 15000 ms
                0616: define_AS_pack_end 1@
                0618: assign_actor cop_1 to_AS_pack 1@
                061B: remove_references_to_AS_pack 1@
                
                0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset -2.0 0.0 0.0
                0615: define_AS_pack_begin 1@
                0812: AS_actor -1 perform_animation "cop_sp_d2_2" IFP "PedEventsMod" framedelta 2.0 loopA 0 lockX 0 lockY 0 lockF 0 time -1  // versionB
                05D3: AS_actor -1 goto_point 4@ 5@ 6@ mode 4 time 15000 ms // versionA
                05CB: AS_actor -1 enter_car driver_car as_driver 15000 ms
                0616: define_AS_pack_end 1@
                0618: assign_actor driver_1 to_AS_pack 1@
                061B: remove_references_to_AS_pack 1@

                
            end

        end
        
        if
            0611:   actor driver_1 performing_animation "cop_sp_d2_2"
        then
            0A97: 1@ = car driver_car struct
            0D4E: 1@ = read_struct 1@ offset 0x18 size 4
            0AA7: call_function 0x4C5400 num_params 2 pop 2 "boot_dummy" 1@ 2@
            if
                2@ <> 0
            then
                0613: 1@ = actor driver_1 animation "cop_sp_d2_2" time
                if
                    1@ > 0.2
                then
                    if and
                        boot_angle >= 1.0
                        boot_angle < 2.0
                    then
                        068A: set_car driver_car repair_door 1
                        boot_angle = 3.0
                    else
                        if
                            boot_angle < 1.0
                        then
                            3@ = 5.25
                            1@ /= 100.0
                            1@ += 0.02
                            005B: boot_angle += 1@  // (float)
                            if boot_angle > 1.0
                            then boot_angle = 1.0
                            end
                    
                            005B: 3@ += boot_angle  // (float)
                            2@ += 0x10
                            0AA6: call_method 0x59AFA0 struct 2@ num_params 1 pop 0 3@ // Rotate Z
                        end
                    end
                end
            end
        end
        
        
        if and
            00DB:   actor driver_1 in_car driver_car
            00DB:   actor cop_1 in_car cop_car
            progress == 2
        then
            01C2: remove_references_to_actor cop_1 // Like turning an actor into a random pedestrian
            00AE: set_car cop_car traffic_behaviour_to 4 //   
            00AF: set_car cop_car driver_behaviour_to 1 //    
            00AE: set_car driver_car traffic_behaviour_to 4 //   
            00AF: set_car driver_car driver_behaviour_to 1 //    
            01C2: remove_references_to_actor driver_1 // Like turning an actor into a random pedestrian
            01C3: remove_references_to_car cop_car
            01C3: remove_references_to_car driver_car
            cop_1 = -1
            cop_car = -1
            driver_1 = -1
            driver_car = -1
            break
        end
    end
    
    
    if
        select == 3
    then
      
        if and
            0611:   actor cop_1 performing_animation "cop_sp_c3"
            progress == 0
        then
            0613: 1@ = actor cop_1 animation "cop_sp_c3" time
            if
                1@ > 0.95
            then
                progress = 1

                0407: store_coords_to 4@ 5@ 6@ from_car cop_car with_offset -2.0 0.0 0.0
                0615: define_AS_pack_begin 1@
                05D3: AS_actor -1 goto_point 4@ 5@ 6@ mode 4 time 15000 ms // versionA
                05CB: AS_actor -1 enter_car cop_car as_driver 15000 ms
                0616: define_AS_pack_end 1@
                0618: assign_actor cop_1 to_AS_pack 1@
                061B: remove_references_to_AS_pack 1@

                0407: store_coords_to 4@ 5@ 6@ from_car driver_car with_offset -2.0 0.0 0.0
                0615: define_AS_pack_begin 1@
                05D3: AS_actor -1 goto_point 4@ 5@ 6@ mode 4 time 15000 ms // versionA
                05CB: AS_actor -1 enter_car driver_car as_driver 15000 ms
                0616: define_AS_pack_end 1@
                0618: assign_actor driver_1 to_AS_pack 1@
                061B: remove_references_to_AS_pack 1@

            end

        end

        if and
            00DB:   actor driver_1 in_car driver_car
            00DB:   actor cop_1 in_car cop_car
            progress == 1
        then
            01C2: remove_references_to_actor cop_1 // Like turning an actor into a random pedestrian
            00AE: set_car cop_car traffic_behaviour_to 4 //   
            00AF: set_car cop_car driver_behaviour_to 1 //    
            00AE: set_car driver_car traffic_behaviour_to 4 //   
            00AF: set_car driver_car driver_behaviour_to 1 //    
            01C2: remove_references_to_actor driver_1 // Like turning an actor into a random pedestrian
            01C3: remove_references_to_car cop_car
            01C3: remove_references_to_car driver_car
            cop_1 = -1
            cop_car = -1
            driver_1 = -1
            driver_car = -1
            break
        end
    end


    else
        break
    end
until not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coord_x coord_y coord_z radius 200.0

if 056D:   actor driver_1 defined
then 01C2: remove_references_to_actor driver_1 // Like turning an actor into a random pedestrian
end
if 056D:   actor cop_1 defined
then 01C2: remove_references_to_actor cop_1 // Like turning an actor into a random pedestrian
end
if 056E:   car cop_car defined
then 01C3: remove_references_to_car cop_car
end
if 056E:   car driver_car defined
then 01C3: remove_references_to_car driver_car
end
04EF: release_animation "PedEventsMod"

repeat
wait 0
until not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coord_x coord_y coord_z radius 150.0

0A93: terminate_this_custom_script